.for(@i, @n) {
  .each(@i)
}

.for(@n) when (isnumber(@n)) {
  .for(1, @n)
}

.for(@i, @n) when not (@i = @n) {
  .for((@i + (@n - @i) / abs(@n - @i)), @n);
}

.for(@array) when (default()) {
  .for-impl(length(@array))
}

.for-impl(@i) when (@i > 1) {
  .for-impl((@i - 1))
}

.for-impl(@i) when (@i > 0) {
  .each(extract(@array, @i))
}
